package com.bestcem.xm.om.enums;

import lombok.Getter;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;

/**
 * 模板参数枚举
 *
 * @author zhangfeng <feng.zhang@idiaoyan.com>
 * @version v1.0
 * @date 2021/11/8 16:53
 */
@Getter
@ToString
public enum TemplateParamEnum {
    /**
     * 公司名称
     */
    ORG_NAME("公司名称", ""),

    /**
     * 公司代号
     */
    ORG_CODE("公司代号", ""),

    /**
     * 正式套餐
     */
    FORMAL_PACKAGE("正式套餐", ""),

    /**
     * 正式套餐到期日
     */
    FORMAL_PACKAGE_EXPIRY_DATE("正式套餐到期日", ""),

    /**
     * 试用套餐
     */
    TRIAL_PACKAGE("试用套餐", ""),

    /**
     * 试用套餐到期日
     */
    TRIAL_PACKAGE_EXPIRY_DATE("试用套餐到期日", ""),

    /**
     * 链接列表
     */
    LINK_LIST("链接列表", "链接=\"(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]\"");

    private final String name;
    private final String regex;

    TemplateParamEnum(String name, String regex) {
        this.name = name;
        this.regex = regex;
    }

    public static boolean isLink(String param) {
        return StringUtils.isNotEmpty(param) && param.matches(LINK_LIST.getRegex());
    }

    public static String getParam(String param) {
        if (StringUtils.isEmpty(param)) {
            return null;
        }
        for (TemplateParamEnum paramEnum : TemplateParamEnum.values()) {
            if (paramEnum.getName().equals(param)) {
                return param;
            } else if (StringUtils.isNotEmpty(paramEnum.getRegex()) && param.matches(paramEnum.getRegex())) {
                // 处理链接的情况
                return param.substring(4, param.lastIndexOf("\""));
            }
        }
        return null;
    }

    public static TemplateParamEnum getParamEnum(String param) {
        if (StringUtils.isEmpty(param)) {
            return null;
        }
        for (TemplateParamEnum paramEnum : TemplateParamEnum.values()) {
            if (paramEnum.getName().equals(param)) {
                return paramEnum;
            }
        }
        return null;
    }
}
